package com.education.welco.controller;

import com.education.common.pojo.AjaxResult;
import com.education.utils.BaiduAipContentCensor;
import com.education.welco.pojo.MineResTable;
import com.education.welco.pojo.SResources;
import com.education.welco.pojo.dto.ResPoolToLessonDTO;
import com.education.welco.pojo.vo.MineResTableVO;
import com.education.welco.pojo.vo.ResNameUrlVO;
import com.education.welco.service.IMineResTableService;
import com.education.welco.service.IPlatformResourcesService;
import com.education.welco.service.ISResourcesService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;

import static com.education.welco.pojo.consts.FileConst.*;

/**
 * 我的资源库资源 controller业务
 *
 * @Author: liftsail
 * @Date: 2022-10-22
 * @Description: 不积跬步无以至千里
 */
@RestController
@RequestMapping("/mineResTable")
public class MineResTableController {

    @Autowired
    private IMineResTableService mineResTableService;

    @Autowired
    private IPlatformResourcesService platformResourcesService;

    @Autowired
    private ISResourcesService resourcesService;

    @Autowired
    private BaiduAipContentCensor baiduAipContentCensor;

    /**
     * 列表查询我的资源库资源
     */
    @GetMapping("/list")
    public AjaxResult list(MineResTable mineResTable, Integer pageNum, Integer pageSize) {
        if (pageNum != null && pageSize != null) {
            PageHelper.startPage(pageNum, pageSize);
        }
        List<MineResTable> list = mineResTableService.selectMineResTableList(mineResTable);
        PageInfo pageInfo = new PageInfo<>(list);
        return AjaxResult.success("查询成功！", pageInfo);
    }


    /**
     * 新增保存我的资源库资源
     * 内容审核-可能有图片，可能有视频
     */
    @PostMapping("/add")
    public AjaxResult addSave(@RequestBody MineResTableVO mineResTableVO) {
        List<ResNameUrlVO> nameUrlVOList = mineResTableVO.getMineResUrl();
        if (nameUrlVOList == null && nameUrlVOList.size() == 0) return AjaxResult.error("请选择上传的文件！");
        for (ResNameUrlVO resNameUrlVO : nameUrlVOList) {
            MineResTable mineResTable = new MineResTable();
            mineResTable.setCatalogId(mineResTableVO.getCatalogId());
            mineResTable.setCreateBy(mineResTableVO.getCreateBy());
            mineResTable.setMineResName(resNameUrlVO.getName().substring(0, resNameUrlVO.getName().lastIndexOf(".")));
            mineResTable.setExtension(resNameUrlVO.getName().replace(resNameUrlVO.getName().substring(0, resNameUrlVO.getName().lastIndexOf(".")) + ".", ""));
            mineResTable.setMineResUrl(resNameUrlVO.getUrl());
            mineResTable.setResSize(Long.valueOf(resNameUrlVO.getSize()));
            mineResTable.setResType(judgeResType(resNameUrlVO.getName().replace(resNameUrlVO.getName().substring(0, resNameUrlVO.getName().lastIndexOf(".")) + ".", "")));
            if (mineResTable.getResType().equals("3")) {
                mineResTable.setState("1");
            } else {
                mineResTable.setState("0");
            }
            mineResTableService.insertMineResTable(mineResTable);
            //调用内容审核异步方法
            if (!mineResTable.getResType().equals("3"))
                baiduAipContentCensor.singleFileAddSave(mineResTable.getMineResUrl(), "mineResTable", mineResTable.getResType());
        }
        return AjaxResult.success("添加成功！");
    }

    //根据文件后缀判断资源类型
    public String judgeResType(String extension) {
        //        1
        if (IMG_FILE.contains(extension)) return "1";
        //        2
        if (VIDEO_FILE.contains(extension)) return "2";
        //        3
        if (DOC_FILE.contains(extension)) return "3";
        return "0";
    }

    /**
     * 主键详情我的资源库资源
     */
    @GetMapping("/selectOne")
    public AjaxResult selectOne(Integer id) {
        MineResTable result = mineResTableService.selectMineResTableById(id);
        return AjaxResult.success("查询成功！", result);
    }

    /**
     * 修改保存我的资源库资源
     */
    @PostMapping("/update")
    public AjaxResult editSave(@RequestBody MineResTable mineResTable) {
        mineResTableService.updateMineResTable(mineResTable);
        return AjaxResult.success("修改成功！");
    }

    /**
     * 删除我的资源库资源-逻辑删除
     *
     * @param ids
     * @return
     */
    @GetMapping("/logicDel")
    public AjaxResult logicDel(@NotNull @RequestParam String ids) {
        mineResTableService.logicDeleteMineResTableByIds(ids);
        return AjaxResult.success("删除成功！");
    }

    //    ________________________回收站业务_______________________________

    /**
     * 回收站列表查询  文件类型 文件名称  分页查询   (全部资源目录的资源表关联)
     *
     * @param teaId    老师id
     * @param type     资源类型 0全部,1,2,3
     * @param resName  资源名称
     * @param pageNum  分页
     * @param pageSize 分页
     * @return
     */
    @GetMapping("/recycleList")
    public AjaxResult recycleList(@RequestParam("teaId") Integer teaId,
                                  @RequestParam("resType") Integer type,
                                  String resName, String orderBy,
                                  Integer pageNum, Integer pageSize) {
        if (pageNum != null && pageSize != null) {
            PageHelper.startPage(pageNum, pageSize);
        }
        List<MineResTable> list = mineResTableService.selectMineResTableRecycleList(teaId, type, resName, orderBy);
        PageInfo<MineResTable> mineResTablePageInfo = new PageInfo<>(list);
        return AjaxResult.success(mineResTablePageInfo);
    }

    /**
     * 删除我的资源库资源-逻辑还原
     *
     * @param ids
     * @return
     */
    @GetMapping("/logicRevert")
    public AjaxResult logicRevert(@NotNull @RequestParam String ids) {
        mineResTableService.logicRevertMineResTableByIds(ids);
        return AjaxResult.success("还原成功！");
    }

    /**
     * 删除我的资源库资源-彻底删除
     * 删除七牛云资源-QiniuUtil.deleteFileFromQiniu(tTeacher1.getTeacherImage());
     */
    @GetMapping("/del")
    public AjaxResult remove(@NotBlank @RequestParam String ids) {
        mineResTableService.deleteMineResTableByIds(ids);
        return AjaxResult.success("删除成功！");
    }

    /**
     * 移动资源分组
     *
     * @param ids
     * @param catalogId
     * @return
     */
    @GetMapping("/moveBatch")
    public AjaxResult moveBatch(@RequestParam String ids, @RequestParam Integer catalogId) {
        mineResTableService.moveBatch(ids, catalogId);
        return AjaxResult.success("移动分组成功！");
    }

//    ________________________资源库资源保存为课程资源_______________________________

    /**
     * 我的资源库---------------------------\  课程资源
     * 平台资源(学校资源)--------------------/   数据拷贝保存
     * 数据迁移id集合、资源类型、课程目录id(两个)
     * 资源名称、资源url、资源封面、资源大小
     *
     * @param resPoolToLessonDTO
     * @return
     */
    @PostMapping("/resPoolToLessonTransfer")
    public AjaxResult resPoolToLessonTransfer(@RequestBody ResPoolToLessonDTO resPoolToLessonDTO) {
        List<String> selectedIdList = resPoolToLessonDTO.getSelectedIdList();
        if (selectedIdList != null && selectedIdList.size() == 0)
            return AjaxResult.error("请选中保存数据！");
        //资源来源类型判断 1我的资源 2平台资源
        List<SResources> resourcesList = new ArrayList<>();
        if (resPoolToLessonDTO.getResSource().equals("1")) {
            //通过选中的资源id集合查询资源的详细信息
            resourcesList = mineResTableService.queryResInfoListByIdList(selectedIdList);
        } else if (resPoolToLessonDTO.getResSource().equals("2")) {
            resourcesList = platformResourcesService.queryResInfoListByIdList(selectedIdList);
        }
        //批量插入 资源迁移
        int i = resourcesService.batchInsertSResources(resourcesList, resPoolToLessonDTO.getTopCatalogId(), resPoolToLessonDTO.getCatalogId(), resPoolToLessonDTO.getType());

        return AjaxResult.success("资源库资源上传成功！");
    }


//    今软购买后资源同步到我的资源库默认分组
//    /api/user/k12main/sysUser/selectOnePC?id=1207   查询用户信息
//    专业课程体系的购买 /api/wisdom/web/catalog/addBatch     jr_catalog  jr_user_catalog_buy

//    List<Catalog> catalogs = catalogService.selectByParentId(catalogId);
//    需要下级 catalogId  type(8   9)
//         视频1.虚拟教学 /api/wisdom/web/catalog/virtualTeaching?catalogId=3411&userId=1207   资源类型8、9(8 3D动画 9 FLASH 动画)      根据catalogId查找资源

//    *****需要   catalogId与type
//         文档2.教学课件 /api/wisdom/web/catalog/type?catalogId=3411&userId=1207&type=1        资源类型type=1、---2   文档类型
//         视频3.实操视频 /api/wisdom/web/catalog/type?catalogId=3411&userId=1207&type=4        资源类型type=4   视频类型
//         图片4.实战照片 /api/wisdom/web/catalog/type?catalogId=3411&userId=1207&pageNum=1&pageSize=4&type=5        资源类型type=5   图片类型
//         文档4.技术文档 /api/wisdom/web/catalog/type?catalogId=3411&userId=1207&type=3        资源类型type=3   文档类型

//    备课共享资源的购买 /api/wisdom/web/lessonResources/buy    lesson_resources  lessonresource_user_buy
//    查找资源   /api/wisdom/web/lessonResources/selectAll?id=2035&userId=1207     lesson_resources的id

}